标题挺长,踩过坑的应该看的明白。不过限于目前所做产品流程的限制,我并没有解决掉这个问题,只是简单说一下相应的思路。
- iOS的系统浏览器是Safari,用于Portal认证的则是CNA(Captive Network Assistant),二者的区别在于前者可以打开wachat:这种私有协议头网址,后者无法打开并且限制很多,比如无法使用
alert()
、无法正常使用window.open()
(只能做跳转)等等。 - 问题的症结在于在新版的CNA中是不认
wechat:
这样的私有协议头的,所以自然也就拉不起来微信。解决时需要引导用户点击a标签<a target="_system"></a>
触发Safari,然后再在Safari拉起微信就行了。 - 我目前的portal触发逻辑是,客户端连到wifi上回触发landing,首先返回码设定为401用于触发客户端的portal页面,同时判断客户端UA,如果是部分安卓或iOS就渲染landing实体页(landing.ejs),页面的title和body均为“Success”以作为iOS欺骗(并且会加快从连接到弹出portal的响应时间);js部分,ios是直接打开认证URL,针对部分安卓则是加了判断
document.visibilityState == 'visible'
时触发跳转的事件,用来解决不弹portal的问题。但由于点击按钮之后就直接进到js拉微信认证的流程了(少一步引导拉起微信),所以其实需要部分变更产品流程才行(这个版本暂时没戏)。 -
参考链接:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。